import $ui from '@lib/ui'
import $store from '$store';
import $util from '$util';
window.apiready
    ? (window.apiready = function () {
        init();
    })
    : init();

function init() {
    setTimeout(() => {
        // 1.修复开启沉浸式效果带来的顶部Header与手机状态栏重合的问题，最新api.js方法已支持适配iPhoneX；
        // 2.默认已开启了沉浸式效果 config.xml中 <preference name="statusBarAppearance" value="true"/>
        // 3.沉浸式效果适配支持iOS7+，Android4.4+以上版本
        // 最新api.js为了适配iPhoneX增加的方法，修复底部Footer部分与iPhoneX的底部虚拟横条键重叠的问题；

        let _accessToken = '',
            _isResume = false, //是否切回前台
            _isShowUpgradeTip = false, //提示框显示控制
            _env = process.env.NODE_ENV === 'development' ? 'dev' : 'prod';

        // dom  更新 
        api.parseTapmode();

        // 状态栏为dark
        api.setStatusBarStyle({
            style: 'dark'
        });

        // 保持不休眠 
        api.setKeepScreenOn({
            keepOn: true
        });

        // 监听网络
        api.addEventListener({
            name: 'offline'
        }, function (ret, err) {
            $ui.showNetToast();
        });

        //云修复
        api.addEventListener({
            name: 'smartupdatefinish'
        }, function (ret, err) {
            api.rebootApp();
        });

        _accessToken = $store.getAccessToken(); // 获取 Token

        $util.log('accessToken:', _accessToken);

        $store.setData($store.StoreKeys.IS_ADDING_AMW, 0); //把此项置为0，以便网络异常时提示错误

        // 监控是否切换到后台
        api.addEventListener({
            name: 'resume'
        }, function (ret, err) {
            _isResume = true;
            if (!_isShowUpgradeTip) {
                checkVersion();
            }
        });
        checkVersion();

        //根据环境做版本比较，弹出提示
        function checkVersion() {
            if (_env == 'dev') {
                //如果通过前台切回，则什么都不做
                if (_isResume) {
                    return;
                }
                enter();
            } else {
                compareVersion(function (hasNewVersion, data) {
                    $util.log("hasNewVersion", hasNewVersion)
                    $util.log("data", data)
                    if (hasNewVersion && data) {
                        api.alert({
                            title: '有新版本啦',
                            msg: '当前版本：' + data.cur_version + "\n" + '新版本：' + data.new_version,
                            buttons: ["前往下载"]
                        }, function (ret, err) {
                            _isShowUpgradeTip = false;
                            enterUpgrade(api.systemType == 'ios' ? data.ios_url : data.android_url);
                        });

                        _isShowUpgradeTip = true;
                        return;
                    }

                    //如果通过前台切回，则什么都不做
                    if (_isResume) {
                        return;
                    }

                    enter();
                });
            }
        }

        // 进入升级页面
        function enterUpgrade(url) {
            var params = {
                name: 'upgrade',
                url: url,
                bounces: false,
                vScrollBarEnabled: false,
                hScrollBarEnabled: false,
                animation: {
                    type: "push", //动画类型（详见动画类型常量）
                    subType: "from_right", //动画子类型（详见动画子类型常量）
                    duration: 300 //动画过渡时间，默认300毫秒
                }
            };

            if (api.systemType == 'android') {
                api.addEventListener({
                    name: 'keyback'
                }, function (ret, err) { });

                params.rect = {
                    x: 0,
                    y: 0,
                    w: 0,
                    h: 0,
                }

                setTimeout(function () {
                    api.alert({
                        title: '提示',
                        msg: '安卓用户请到状态栏查看下载进度并安装',
                    }, function (ret, err) {
                        _isShowUpgradeTip = false;
                    });
                }, 500);
            } else {
                removeLaunchView();
            }

            api.openFrame(params);
        }

        function enter() {
            removeLaunchView();
            
            if (!_accessToken) {
                $ui.openWin('account/login', null, false, false, true, {
                    type: "fade",
                    duration: 900
                });
                return;
            }

            $ui.openMain();
        }

        //移除启动页
        function removeLaunchView() {
            api.removeLaunchView({
                animation: {
                    type: 'fade',
                    duration: 400
                }
            });
        }

        //比较版本号
        function compareVersion(cb) {
            api.readFile({
                path: 'widget://version.txt'
            }, function (ret, err) {
                $util.log('loadVersion:', ret, err);
                if (err || !ret.data) {
                    cb(false);
                    return;
                }

                var curVerArr = ret.data.split(' ');
                if (!curVerArr[0]) {
                    cb(false);
                    return;
                }

                api.ajax({
                    url: 'http://img.loock.cn/app/ydjf_dev_version.txt?r=' + Math.random(),
                    method: 'get',
                    timeout: 5,
                    encode: false,
                    charset: 'utf-8',
                }, function (ret, err) {
                    $util.log('newVersion:', ret, err);
                    if (err || !ret) {
                        cb(false);
                        return;
                    }

                    var hasNewVersion = $util.compareVersion(curVerArr[0], ret.yd_version) == 1 ||
                        $util.compareVersion(api.appVersion, ret.ac_version) == 1;

                    if (hasNewVersion) {
                        ret.cur_version = 'v' + curVerArr[0] + '(' + api.appVersion + ')';
                        ret.new_version = 'v' + ret.yd_version + '(' + ret.ac_version + ')';
                        cb(true, ret);
                    } else {
                        cb(false);
                    }
                });
            });
        }
    }, 50);

    
}